"""
https://leetcode.cn/problems/invert-binary-tree/description/

226. 翻转二叉树
已解答
简单
相关标签
相关企业
给你一棵二叉树的根节点 root ，翻转这棵二叉树，并返回其根节点。

 

示例 1：



输入：root = [4,2,7,1,3,6,9]
输出：[4,7,2,9,6,3,1]
示例 2：



输入：root = [2,1,3]
输出：[2,3,1]
示例 3：

输入：root = []
输出：[]
 

提示：

树中节点数目范围在 [0, 100] 内
-100 <= Node.val <= 100

"""
# Definition for a binary tree node.
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
from typing import Optional


class Solution:
    """
    递归是一种化繁为简的思路
    一般人思考起来会很直观，类比于应用题中用x表示未知量设置方程

    本体的要求，就是对每个node输出，要求：
    node.left,node.right=node.right,node.left

    """

    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        def invertNode(node):
            if not node:
                return
            node.left,node.right=node.right,node.left
            invertNode(node.left)
            invertNode(node.right)

        invertNode(root)
        return root
    
    